from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from server.etc.settings import settings

if settings.USE_SQLITE:
    SQLALCHEMY_DATABASE_URL = settings.SQLITE_URL
    engine = create_engine(
        SQLALCHEMY_DATABASE_URL, connect_args={'check_same_thread': False}
    )
elif settings.USE_MYSQL:
    SQLALCHEMY_DATABASE_URL = settings.MYSQL_URl
    engine = create_engine(
        SQLALCHEMY_DATABASE_URL, echo=True
    )
else:
    SQLALCHEMY_DATABASE_URL = settings.POSTGRES_URL
    engine = create_engine(
        SQLALCHEMY_DATABASE_URL
    )

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
metadata = Base.metadata


def create_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()